/*登录服务器用到的头文件

*/
#ifndef SS_LOGINPROTO_H_
#define SS_LOGINPROTO_H_

//#include "ssProtoSunGard.h"
#include <string>
#include <vector>
#include <list>

#pragma warning( disable : 4996 )
#include "ssCmnDefine.h"

#ifdef WIN32
#pragma pack(push)
#pragma pack(1)
#define Y_RD_PACKED	
#else
#include <string.h>
#define Y_RD_PACKED	__attribute__ ((packed))
#endif

namespace qb
{

	//client 1(C) systemserver 2(S) marketserver 3(M) tradeserver 4(T)
	enum _eFunLgnID_t
	{
		E_FID_LGN_LOGIN_INFO = 6000,								//客户端登录 1 -- 2
		E_FID_LGN_LOGOUT_INFO = 6001,								//客户端登出 1 -- 2
		E_FID_LGN_COOKIE_INFO = 6002,								//登录服务器传递cookie给行情服务器 1 -- 2
		E_FID_LGN_ONLINE_INFO = 6003,								//查询行情服务器在线用户情况 1 -- 2
		E_FID_LGN_ONLINE_CNT_INFO = 6004,							//查询行情服务器在线用户数量情况 1 -- 2
		E_FID_LGN_KICK_USER = 6005,									//踢用户
		E_FID_LGN_COOKIE_INFO_NEW = 6006,							//登录服务器传递cookie给行情服务器 1 -- 2
		E_FID_LGN_QUERY_USER_INFO = 6007,							//查询用户的合法性
		E_FID_LGN_RE_LOGIN_INFO = 60010,							//客户重新端登录 1 -- 2
		E_FID_LGN_RE_LOGIN_COOKIE_INFO = 60011,						//login server 重新发cookie
		E_FID_LGN_RE_NEW_LOGIN_INFO = 60012,						//客户重新端登录_New 2017-3-13
		E_FID_LGN_ENCRYPT_LOGIN_INFO = 6020,						//客户端加密登录 20170720
		E_FID_LGN_ENCRYPT_RE_LOGIN_INFO = 6021,						//客户加密重新端登录 20170720
		E_FID_LGN_ENCRYPT_LOGOUT_INFO = 6022,						//客户加密登出 20170720

		E_FID_LGN_PRO_LOGIN_INFO = 6023,							//客户端加密PRO登录 20171010
		E_FID_LGN_PRO_RE_LOGIN_INFO = 6024,							//客户加密PRO重新端登录 20171010

		E_FID_LGN_PRO_LOGIN_INFO_V2 = 6025,							//客户端加密PRO登录 20201022
		//E_FID_LGN_PRO_RE_LOGIN_INFO_V2 = 6026,						//客户加密PRO重新端登录 20201022

		E_FID_CM_LOGIN_INFO = 6300,									//登录服务器登录行情服务 1 -- 2
		E_FID_CM_LOGOUT_INFO = 6301,								//登录服务器登出行情服务

		E_FID_LGN_CONN_TEST = 6500,								///网络连接测试
		E_FID_LGN_CONN_RTT = 6505,								//网络速度测试
		E_FID_LGN_CONN_RTT_NEW = 6506,							//网络速度测试,返回Login 的连接数
		E_FID_LGN_SERVER_QPID = 8201,			//调用服务端RPC,qpid
		E_FID_LGN_SERVER_QPID_JAVA = 8202,			//调用服务端RPC,qpid,给Java的请求，透传

		E_FID_MYSQL_RECONNECT = 11111,   //MYSQL重新俩接

	};


	//(int)magic + (int)len + msgflag + msghead + msgbody + crc(int)

	//unsigned char msgflag;	//消息封装模式 0bit 有无压缩 1bit 有无加密, 0 无压缩无加密 1 有压缩无加密 2 无压缩有加密 3 有压缩有加密

	//UINT m_msgLength;


	//登录消息
	struct _xLoginLgnSvrReq_t
	{
		char accountname[Y_RD_USERNAME_LEN];			//账户
		char passwd[Y_RD_PASSWD_LEN * 2];					//密码,传MD5
		char vcode[Y_RD_PASSWD_LEN];
		double version;									//版本
		char buf[512];									//
		char reserve[32];								//保留
		char loginType[4];							//登录方式    默认为0，正常登陆    1，扫码登录(服务器不需要判断mac地址)
	}Y_RD_PACKED;
	typedef struct _xLoginLgnSvrReq_t xLoginLgnSvrReq_t;

	struct _xLoginLgnSvrAck_t
	{
		char cookie[Y_RD_COOKIE_LEN];						//分配给客户端的cookie
		char mainip[Y_RD_HOST_LEN];						//服务器 ip
		short mainport;												//服务器 端口
		char backip1[Y_RD_HOST_LEN];						//备用服务器 ip
		short backport1;												//备用服务器 端口
		char backip2[Y_RD_HOST_LEN];						//备用服务器 ip
		short backport2;												//备用服务器 端口
		int time;												//系统时间
		char username[Y_RD_USERNAME_LEN];			//客户名称
		int securitylevel;							//客户安全类别(0：安全、1：不安全、3：危险、6：冻结)
		char reserve1[Y_RD_RESERVE_LEN];            //未用，保留
		char lastip[Y_RD_HOST_LEN];		            //上次登录IP 地址
		char lastdate[Y_RD_DATE_LEN + 1];           //上次登录日期
		char lasttime[Y_RD_TIME_LEN + 1];           //上次登录时间
		char reserve2[Y_RD_RESERVE_LEN];            //未用，保留
		char validtime[Y_RD_DATETIME_LEN];			//账户有效期
		int vid;
		int utid;
		int flag;								//1--自动更新，2--不提示更新，3--强制更新
		char userID[Y_RD_USERNAME_LEN];			//客户唯一标识码
	}Y_RD_PACKED;
	typedef struct _xLoginLgnSvrAck_t xLoginLgnSvrAck_t;

	struct _xGWInfo_t
	{
		char ip[Y_RD_HOST_LEN];						//ip
		int port;									//端口
		int level;									//权
		char note[32];								//说明
		_xGWInfo_t() {
			memset(this, 0, sizeof(_xGWInfo_t));
		}
	}Y_RD_PACKED;
	typedef struct _xGWInfo_t xGWInfo_t;

	struct _xLoginLgnSvrProAck_t
	{
		char cookie[Y_RD_COOKIE_LEN];				//分配给客户端的cookie
		std::list<xGWInfo_t> gwlist;				//网关列表
		int time;									//系统时间
		char username[Y_RD_USERNAME_LEN];			//客户名称
		int securitylevel;							//客户安全类别(0：安全、1：不安全、3：危险、6：冻结)
		char reserve1[Y_RD_RESERVE_LEN];            //未用，保留
		char lastip[Y_RD_HOST_LEN];		            //上次登录IP地址
		char lastdate[Y_RD_DATE_LEN + 1];           //上次登录日期
		char lasttime[Y_RD_TIME_LEN + 1];           //上次登录时间
		char reserve2[Y_RD_RESERVE_LEN];            //未用，保留
		char validtime[Y_RD_DATETIME_LEN];			//账户有效期
		int vid;
		int utid;
		int flag;									//1--自动更新，2--不提示更新，3--强制更新
		char userID[Y_RD_USERNAME_LEN];				//客户唯一标识码
		char serverID[Y_RD_USERNAME_LEN];			//服务器ID，（专线，非专线，其他）
	};
	typedef struct _xLoginLgnSvrProAck_t xLoginLgnSvrProAck_t;

	//登出消息
	struct _xLogoutLgnSvReq_t
	{
		char accountname[Y_RD_USERNAME_LEN];			//账户
		char passwd[Y_RD_PASSWD_LEN];					//?密码
		char cookie[Y_RD_COOKIE_LEN];					//cookie;	
	}Y_RD_PACKED;
	typedef struct _xLogoutLgnSvReq_t xLogoutLgnSvReq_t;

	//无消息体

	//E_FID_LGN_CONN_RTT_NEW		= 6506,							//网络速度测试,返回Login 的连接数
	struct _xRTTPACKNEW_t
	{
		int nID;									//客户端填，服务端原值返回
		unsigned int dwTickCount_begin;					//客户端填，服务端原值返回
		unsigned int dwTickCount_end;					//客户端填，服务端原值返回
		int nConNum;								//Login服务的链接数量，由服务端填
		int nBak;									//备用扩展字段
		_xRTTPACKNEW_t() :nID(0), dwTickCount_begin(0), dwTickCount_end(0), nConNum(0), nBak(0) {}
	}Y_RD_PACKED;
	typedef struct _xRTTPACKNEW_t xRTTPACKNEW_t;

	//-----------------行情服务
	//登录服务器登录到行情服务器消息
	struct _xLoginMktSvrReq2_t
	{
		char accountname[Y_RD_USERNAME_LEN];			//账户
		char cookie[Y_RD_COOKIE_LEN];			//cookie

	}Y_RD_PACKED;
	typedef struct _xLoginMktSvrReq2_t xLoginMktSvrReq2_t;

	//无消息体

	//登出消息
	struct _xLogoutMktSvrReq2_t
	{
		char accountname[Y_RD_USERNAME_LEN];			//账户
		char cookie[Y_RD_COOKIE_LEN];					//cookie;

	}Y_RD_PACKED;
	typedef struct _xLogoutMktSvrReq2_t xLogoutMktSvrReq2_t;

	//发送cookie消息到行情服务器
	struct _xCookieMktSvrReq_t
	{
		char accountname[Y_RD_USERNAME_LEN];			//账户
		char cookie[Y_RD_COOKIE_LEN];					//cookie;

	}Y_RD_PACKED;
	typedef struct _xCookieMktSvrReq_t xCookieMktSvrReq_t;


	/*查询在线用户返回，无请求包，只要发送请求头*/
	struct _xQueryOnlineUserMtkAck_t
	{
		char username[Y_RD_USERNAME_LEN];				//用户
		char ip[Y_RD_HOST_LEN * 2];							//交易服务器 ip
		short port;										//交易服务器 端口
		int logintime;									//登陆时间
		int status;
	}Y_RD_PACKED;
	typedef struct _xQueryOnlineUserMtkAck_t xQueryOnlineUserMtkAck_t;

	/*查询在线用户数目返回，无请求包，，只要发送请求头*/
	struct _xQueryOnlineCountMtkAck_t
	{
		int validcnt;		//正常用户数量
		int invalidcnt;		//异常用户数量
	}Y_RD_PACKED;
	typedef struct _xQueryOnlineCountMtkAck_t xQueryOnlineCountMtkAck_t;

	//E_FID_CONN_TEST		= 6500,									////网络连接测试

}

#ifdef WIN32
#pragma pack(pop)
#endif
#endif
